/* * Copyright 2016 bingoogolapple * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package cn.bingoogolapple.swipebacklayout; import android.app.Activity; import android.content.res.Configuration; import android.content.res.Resources; import android.os.Build; import android.text.TextUtils; import android.util.DisplayMetrics; import android.view.Display; import android.view.WindowManager; import java.lang.reflect.Method; /** * 作者:王浩 邮件:bingoogolapple@gmail.com * 创建时间:16/12/27 下午5:26 * 描述: */ class UIUtil { private UIUtil() { } /** * 获取底部导航栏高度 * * @param activity * @return */ public static int getNavigationBarHeight(Activity activity) { int navigationBarHeight = 0; Resources resources = activity.getResources(); int resourceId = resources.getIdentifier(resources.getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT ? "navigation_bar_height" : "navigation_bar_height_landscape", "dimen", "android"); if (resourceId > 0 && checkDeviceHasNavigationBar(activity)) { navigationBarHeight = resources.getDimensionPixelSize(resourceId); } return navigationBarHeight; } /** * 检测是否具有底部导航栏 * * @param activity * @return */ public static boolean checkDeviceHasNavigationBar(Activity activity) { boolean hasNavigationBar = false; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { if (TextUtils.equals("Nexus 4".toLowerCase().trim(), Build.MODEL.toLowerCase().trim())) { hasNavigationBar = false; } else { hasNavigationBar = newCheckDeviceHasNavigationBar(activity); } } else { hasNavigationBar = oldCheckDeviceHasNavigationBar(activity); } return hasNavigationBar; } private static boolean oldCheckDeviceHasNavigationBar(Activity activity) { boolean hasNavigationBar = false; Resources resources = activity.getResources(); int id = resources.getIdentifier("config_showNavigationBar", "bool", "android"); if (id > 0) { hasNavigationBar = resources.getBoolean(id); } try { Class systemPropertiesClass = Class.forName("android.os.SystemProperties"); Method m = systemPropertiesClass.getMethod("get", String.class); String navBarOverride = (String) m.invoke(systemPropertiesClass, "qemu.hw.mainkeys"); if ("1".equals(navBarOverride)) { hasNavigationBar = false; } else if ("0".equals(navBarOverride)) { hasNavigationBar = true; } } catch (Exception e) { } return hasNavigationBar; } private static boolean newCheckDeviceHasNavigationBar(Activity activity) { WindowManager windowManager = activity.getWindowManager(); Display display = windowManager.getDefaultDisplay(); DisplayMetrics realDisplayMetrics = new DisplayMetrics(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { display.getRealMetrics(realDisplayMetrics); } int realHeight = realDisplayMetrics.heightPixels; int realWidth = realDisplayMetrics.widthPixels; DisplayMetrics displayMetrics = new DisplayMetrics(); display.getMetrics(displayMetrics); int displayHeight = displayMetrics.heightPixels; int displayWidth = displayMetrics.widthPixels; return (realWidth - displayWidth) > 0 || (realHeight - displayHeight) > 0; } }